﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using ParieurPro.DAL.DatabaseModel;


namespace ParieurPro.DAL
{
    /// <summary>
    /// Classe de gestion d'une compétition (Ligue 1 2011/2012 par exemple).
    /// Une compétition est constituée d'un identifiant unique, d'un identifiant de championnat 
    /// et d'un identifiant de saison
    /// </summary>
    [Serializable()]
    public class ContestObject
    {
        #region Attributes
        private int _championshipId;
        private int _seasonId;
        private int _contestId;
        #endregion

        #region Properties

        /// <summary>
        /// Identifiant unique de la compétition
        /// </summary>
        [Key()]
        [DataMemberAttribute()]
        public int ContestId
        {
            get { return _contestId; }
            set { _contestId = value; }
        }

        /// <summary>
        /// Identifiant unique du championnat
        /// </summary>
        [DataMemberAttribute()]
        public int ChampionshipId
        {
            get { return _championshipId; }
            set { _championshipId = value; }
        }

        /// <summary>
        /// Identifiant unique de la saison
        /// </summary>
        [DataMemberAttribute()]
        public int SeasonId
        {
            get { return _seasonId; }
            set { _seasonId = value; }
        }
        #endregion

        #region Data access

        /// <summary>
        /// Copie l'objet représentant la table "Contests" de la base de données
        /// en objet "ContestObject"
        /// </summary>
        /// <param name="dataToCopy">Objet à copier</param>
        /// <returns>Objet copié</returns>
        public static ContestObject CopyFromDatabaseObject(Contests dataToCopy)
        {
            if (dataToCopy == null)
            {
                throw new ArgumentException("ContestObject.CopyFromDatabaseObject - dataToCopy can not be null");
            }
            ContestObject contestTgt = new ContestObject();
            contestTgt.ContestId = dataToCopy.ContestId;
            contestTgt.ChampionshipId = dataToCopy.ChampionshipId;
            contestTgt.SeasonId = dataToCopy.SeasonId;
            return contestTgt;
        }

        /// <summary>
        /// Renvoie l'identifiant de la compétition à partir de l'identifiant
        /// du championnat et de l'identifiant de la saison
        /// </summary>
        /// <param name="dbContext">Connexion à la base de données</param>
        /// <param name="championshipId">Identifiant du championnat</param>
        /// <param name="seasonId">Identifiant de la saison</param>
        /// <returns>Identifiant de la compétition</returns>
        public static int? GetId(MyBetDBEntities dbContext, int championshipId, int seasonId)
        {
            if (dbContext == null)
            {
                throw new ArgumentException("ContestObject.GetId - dbContext can not be null");
            }
            // Récupération de la compétition
            var query = (from contest in dbContext.Contests
                         where contest.ChampionshipId == championshipId && contest.SeasonId == seasonId
                         select contest.ContestId);
            int id = query.FirstOrDefault();
            if (id == 0)
            {
                // Compétition inconnue
                return null;
            }
            return id;
        }

        #endregion

    }
}